stalker_knigifandomcom_ru-20200215-history
Модуль:Example
local p = {} -- используется для того, чтобы можно было удалять элементы из таблицы local function copy(other) local res = {} for k,v in pairs(other) do resk = v end return res end -- вызов шаблона, при ошибке возвращает пустую строку local function expand(frame, tname, targs) local success, result = pcall( frame.expandTemplate, frame, {title = tname, args = targs} ) if success then return result else return '' end --return frame:expandTemplate({title = tname, args = args}) end --предотвращает обработку вики-текста в отображении образца local function nowiki(str) local res = str str = mw.text.unstripNoWiki(str) str = string.gsub(str, '%'[') str = string.gsub(str, '%', ']') str = string.gsub(str, '<', '<') str = string.gsub(str, '>', '>') str = string.gsub(str, '{', '{') str = string.gsub(str, '}', '}') str = string.gsub(str, '\'', ') str = string.gsub(str, '"', '"') str = string.gsub(str, '(https?://)', '%1') return str end --удаляет из параметров вписанные через HTML-сущности "" и заменяет " " на "=" для вызова шаблона local function process_nowiki_equals(str) str = str:gsub(, ):gsub(, ) :gsub(, ):gsub(, '') :gsub(' ', '=') :gsub(' ', '=') :gsub(' ', '=') :gsub(' ', '=') :gsub('&', '&') return str end function p.main(frame) if not getArgs then getArgs = require('Module:Arguments').getArgs end local yesno = require('Module:Yesno') local args = copy(getArgs(frame, {trim = false, removeBlanks = false})) --copy(frame.args) local tag = args._tag or 'code' local container = args._container or nil local sep = args._sep and args._sep .. ' ' or '→ ' -- по умолчанию "→" local link = yesno(args._link, false) local endl = args._endl or '' local prefix = args._prefix or args'_pre-text' or '' local postfix = args._postfix or args'_post-text' or '' local comment_sep = args._comment_sep or ' ' -- передаётся шаблоном , один разделитель на все примеры local after = args._after or args._comment or '' -- полезно в шаблоне (это просто текст в конце) local before = args._before and args._before .. ' ' or '' -- полезно в шаблоне -- (это просто текст в начале) local nobr = yesno(args._nobr, false) local spaced = yesno(args._spaced, false) local nocat = yesno(args._nocat, false) local style = args._style if style 'pre' then tag = nil container = 'pre' sep = '\n' elseif style '*pre' then tag = nil container = '*pre' sep = '\n' elseif style 'pre↓' then tag = nil container = 'pre' sep = ' ↓ \n' --содержимое шаблона elseif style '*pre↓' then tag = nil container = '*pre' sep = ' ↓ \n' --содержимое шаблона elseif style 'wikitable' then tag = 'tt' sep = '\n|' comment_sep = '\n|' end if (after ~= '') then after = comment_sep .. after end local nwt if tag then nwt = mw.html.create(tag):tag(tag) --"no-wiki tag", внутри него шаблон не вызывается if nobr then nwt:css('white-space', 'nowrap') end end local content = nowiki(prefix) .. ' ') equals_pos-2 then equals_pos = nil end if equals_pos then --содержащие "=" преобразуем в именованные param = v:sub(1, equals_pos-1) value = v:sub(equals_pos+1) targsparam = process_nowiki_equals(value) content = content .. (spaced and ' ' or '') .. '|' .. nowiki(param) .. '=' .. nowiki(value) .. endl left_shift = left_shift+1 --переменная нужна, чтобы квазинумерованные параметры, переданные через " ", --не сбивали порядок else --истинно неименованные targs- left_shift = process_nowiki_equals(v) content = content .. (spaced and ' ' or '') .. '|' .. nowiki(v) .. endl end elseif not k:find('^_') then --именованные параметры, исключая модификаторы внешнего вида targsk = process_nowiki_equals(v) content = content .. (spaced and ' ' or '') .. '|' .. nowiki(k) .. '=' .. nowiki(v) .. endl end end content = content .. '}}' .. nowiki(postfix) if container then local container_args = {} container_args1 = content nwt = expand(frame, container, container_args) else nwt:wikitext(content):done() end if nocat then targs'nocat' = 1 end expand_result = tostring(expand(frame, tname, targs)) if expand_result:sub(1, 2) '{|' then sep = sep .. '\n' end return before .. tostring(nwt) .. ' ' .. sep .. prefix .. expand_result .. postfix .. after end return p